A nivel de C, los objetos de Ruby se representan mediante estructuras que separan datos del comportamiento mediante una jerarquía basada en punteros. El klass puntero conecta una instancia con su "clase asociada" (donde viven los métodos), mientras que el super puntero conecta las clases con sus ancestros, creando un mapa estructural que la máquina virtual de Ruby utiliza para resolver la herencia.
1. El puntero klass y sus banderas
Cada objeto de Ruby contiene un encabezado con un klass puntero y una máscara de banderas. Estas banderas identifican el estado interno del objeto, como marcar las "clases virtuales" creadas automáticamente con una 'V' para manejar las asignaciones de métodos singleton.
2. Desacoplamiento de estado (Figura 24.1)
Una instancia como lucille almacena sus propios variables de instancia, pero no posee métodos propios. Su klass puntero dirige a la VM hacia el Guitar tabla de métodos del objeto de clase.
3. La cadena de herencia
Cuando lucille.play() es llamado, Ruby sigue el klass puntero. Si el método no se encuentra en Guitar, entonces sigue el super puntero hacia Object, otorgando acceso a clone o dup.